/*
    求指定值范围内，所有奇数的斐波那契数字之和。
    输⼊：20 #求斐波那契数⼩于20的奇数和
    输出：23 #说明：0 1 1 2 3 5 8 13, 奇数和为23
    思路：用一个初始化前两位的数组来存fib数列元素，每个数字都是前两个数字相加。
*/

pub fn odd_fibnacci_sum(threshold: u32) -> u32 {
    // 初始化斐波那契数列，前两个数字为1
    let mut fib_numbers = vec![1, 1];
    // 初始和为前两个奇数之和
    let mut sum = 2;
    while let Some(_last) = fib_numbers.last() {
        //最后一个数等于前两个数字相加
        let next = fib_numbers[fib_numbers.len() - 1] + fib_numbers[fib_numbers.len() - 2];
        if next > threshold {
            break;
        }
        fib_numbers.push(next);
        if next % 2 != 0 {
            sum += next;
        }
    }

    sum
}
